<?php

App::uses('File', 'Utility');
class ArticulosController extends AppController 
{
	
	public $uses = array('TipoArticulo','Articulo');	
	
	public $bandera = true;
	
	#---------------------------------------------------#
	#---------------Funciones Principales---------------#
	#---------------------------------------------------#
	public function index()  
	{
		$this->layout = 'default_ini';	
	}
	
	public function add_articulo()
	{
		$this->layout = 'default_ini';		
		$this->llenar_combobox_tipo_articulo(2);
		if($this->request->is('post') || $this->request->is('put'))
		{
			$this->postAddArticulo();
				
		}
	}
	
	public function consult_articulo()
	{
		$this->layout = 'default_ini';	
		$this->llenar_combobox_tipo_articulo(1);
		
	}
	
	public function consult_articulo1($id_tipo_articulo,$nombre_articulo = null)
	{
		$this->layout = 'default_ini';	
		if ($id_tipo_articulo == "")
		{
			$this->Session->setFlash(__('error $id_tipo_articulo'));
		}
		else
		{
			$this->infoConsultArticulo($id_tipo_articulo,$nombre_articulo);
			if($this->request->is('post') || $this->request->is('put'))
			{
				$this->postConsultArticulo();
			}
		}
	}
	
	public function edit_articulo ($id_articulo = null)
	{
		$this->layout = 'default_ini';	
		if($id_articulo == "")
		{
			$this->Session->setFlash(__('error id_articulo'));
		}
		else 
		{
			$this->llenarInfoArticulo(1, $id_articulo);
			if($this->request->is('post') || $this->request->is('put'))
			{
				
				$this->postEditArticulo();
			}
			
		}
	}
	
	public function detalle_articulo ($id_articulo = null)
	{
		$this->layout = 'default_ini';		
		if($id_articulo == "")
		{
			$this->Session->setFlash(__('error id_articulo'));
		}
		else 
		{
			$this->llenarInfoArticulo(2, $id_articulo);
			
		}
	}
	
	public function proc_activacion_desactivacion_articulo($id_articulo,$id_active,$id_val = null)
	{
		
		if($id_articulo == "")
		{
			$this->Session->setFlash(__('error id_articulo'));
		}
		
		else 
		{
				if ($id_val == 1) // Si solo se va activar/descativar un articulo
				{
					$this->proceso_de_act_deact_single($id_articulo,$id_active);
				}
				elseif ($id_val == 2)  // Si se va activar/descativar un grupo de articulos articulos
				{
					if ($this->length_arreglo_articulo($id_articulo) > 2)
					{
						$this->proceso_de_act_deact_multiples($id_articulo,$id_active);
					}
					elseif ($this->length_arreglo_articulo($id_articulo) == 2) 
					{
						$articulo = explode(',', $id_articulo);
						
						$this->proceso_de_act_deact_single($articulo[1],$id_active);	
					}
				}
				//$this->redirect($this->referer());
		}
	}
	
	#---------------------------------------------------#
	#---------------Funciones Secundarias---------------#
	#---------------------------------------------------#
	private function setMessageFlash($id,$mensaje,$nombre_mensaje)
	{
		if (is_null($nombre_mensaje))
		{
			$nombre_mensaje = 'flash';
		}
		switch ($id) 
		{
			case 1: // mensaje bueno
				$this->Session->setFlash($mensaje,'default',array('class'=>'success'),$nombre_mensaje);
				break;
			case 2: // mensaje malo
				$this->Session->setFlash($mensaje,'default',array('class'=>'error-message'),$nombre_mensaje);
				break;
			case 3: // mensaje cuidado
				$this->Session->setFlash($mensaje,'default',array('class'=>'notice'),$nombre_mensaje);
				
				break;
			
			default:
				
				break;
		}
	}
	
	public function getDetalleArticulo($id_articulo)
	{
		$this->layout = false;
		if ($this->request->is('get')) 
		{
			$this->llenarInfoArticulo(2, $id_articulo);
			$this->render('/Elements/GetDetalleArticulo');
		}
	}
	public function getErrors($errors)
	{
		$errores_view = '';
		
		if (array_key_exists('nombre_articulo', $errors))
		{
			$errores_view = $errores_view .'|'.'Nombre del Articulo'.'++'.$errors['nombre_articulo'][0];
		}
		if (array_key_exists('codigo_articulo', $errors))
		{
			$errores_view = $errores_view .'|'.'Codigo del Articulo'.'++'.$errors['codigo_articulo'][0];
		}
		if (array_key_exists('tipo_articulo_id', $errors))
		{
			$errores_view = $errores_view .'|'.'Tipo del Articulo'.'++'.$errors['tipo_articulo_id'][0];
		}

		return $errores_view;
		
		
	}
	public function parserError($error)
	{
		$array_error = array();	
			
		$string_error = explode('|', $error);
		
		for ($i = 0; $i < count($string_error); $i++)
		{
			if ($i != 0)
			{
				$string_problema = explode('++',$string_error[$i]);
					
				array_push($array_error,array(
												'campo' => $string_problema[0],
												'error' => $string_problema[1],
												)
							);
			}
			
		}
		return $array_error;
	}
	public function getEditArticulo($id_articulo,$error = null)
	{
		$this->layout = false;
		
		
		if ($this->request->is('get')) 
		{
			$this->llenarInfoArticulo(1, $id_articulo);
			
			
			if ($error)
			{
				$this->set('errors',$this->parserError($error));	
			}
			else
			{
				$this->set('errors',null);	
			}
			
			$this->render('/Elements/GetEditArticulo');
			
		}
		elseif ($this->request->is('post') || $this->request->is('put') )
		{
			
			
		
			$info_articulo = array( 
										'Articulo'=> array(
															'id' => $this->request->data['id'],
															'codigo_articulo' => $this->request->data['codigo_articulo'],
															'nombre_articulo' => $this->request->data['nombre_articulo'],
															'tipo_articulo_id' => $this->request->data['tipo_articulo_id'],
															'descripcion_articulo' => $this->request->data['descripcion_articulo'],
															'foto_articulo' => $this->request->data['foto_articulo_char'],
															'foto_articulo_upload' => array(
																						'name' => $this->request->data['foto_articulo_name'],
																						'type' => $this->request->data['foto_articulo_type'],
																						'tmp_name' => 'D:\xampp\tmp\php123456.tmp',
																						'error' => intval('0'),
																						'size' => intval($this->request->data['foto_articulo_size'])
																					),
															'foto_articulo_dir' => $this->request->data['foto_articulo_dir'],
															'foto_articulo_viejo' => $this->request->data['foto_articulo_viejo'],
															'foto_articulo_valor_img' => $this->request->data['foto_articulo_valor_img']
															
														) 
										
									);

			
			//debug($info_articulo);  
			$this->postEditArticulo($info_articulo);
		}
		
	}
	function saveImg($data, $id_articulo, $articulo_nombre)
	{

		 $str_data = explode(',', $data);

		 $image = $this->base64_to_jpeg( $str_data[1], 
	 									WWW_ROOT.'files/articulo/foto_articulo/'
										.$id_articulo.'/'.$articulo_nombre );
		
	}
	
	function base64_to_jpeg( $base64_string, $output_file ) 
	{
	    $ifp = fopen( $output_file, "wb+" ); 
	    fwrite( $ifp, base64_decode( $base64_string) ); 
	    fclose( $ifp ); 
	    return( $output_file ); 
	}
	public function getGridConsultArticulo($id_tipo_articulo,$nombre_articulo)
	{
		
		$this->layout = false;
		if ($this->request->is('get')) 
		{
			$this->llenar_articulo($id_tipo_articulo, $nombre_articulo);
			$this->render('/Elements/GridConsultArticulo');
		}
		
	}
	
	private function length_arreglo_articulo($arreglo_articulo)
	{
		$articulos = explode(',', $arreglo_articulo);
		return count($articulos);
	}
	
	private function proceso_de_act_deact_single ($id_articulo,$id_active)
	{
		if (!$id_active)
		{
			$this->Session->setFlash(__('error id null'));
		}
		elseif (!$id_articulo)
		{
			$this->Session->setFlash(__('error id_articulo null'));
		}
		else 
		{
			
			$articulo = $this->Articulo->findById($id_articulo);
			if ($articulo)
			{
				if ($this->proceso_de_act_deact($id_articulo,$id_active))
				{
					if ($id_active == 1) # proceso de activacion
					{
						$this->setMessageFlash(1, 'Se ha activado el articulo');
						
					}
					elseif ($id_active == 2)
					{
						$this->setMessageFlash(1, 'Se ha desactivado el articulo');
					}
				}
				else 
				{
					$this->setMessageFlash(2, 'No se pudo completar el proceso de Activacion/Desactivacion del articulo');
					
				}
			}
			

		}	
		
		
		
	}
	
	private function proceso_de_act_deact_multiples($id_articulo,$id_active)
	{
		if (!$id_active)
		{
			$this->Session->setFlash(__('error id null'));
		}
		elseif (!$id_articulo)
		{
			$this->Session->setFlash(__('error id_articulo null'));
		}
		else 
		{
			$articulos = explode(',', $id_articulo);
			
			$buenas = array();
			$malas = array();
			
			foreach ($articulos as $articulo ) 
			{
				if($articulo != "")
				{
					$articulo_ext = $this->Articulo->findById($articulo);
					if ($articulo_ext) 
					{
						if ($this->proceso_de_act_deact($articulo,$id_active))
						{
							array_push($buenas,$articulo);
						}
						else 
						{
							array_push($malas,$articulo);
						}
					}
				}
			}
			if ($buenas != null )
			{
				if ($malas != null)
				{
					$this->setMessageFlash(3, 'No se pudo terminar por completo el proceso');
					return 3; // significa que varias se pudieron eliminar, otras no.
				}
				else 
				{
						
					if ($id_active == 1) # proceso de activacion
					{
						$this->setMessageFlash(1, 'Se Activaron los articulos seleccionados');
						
					}
					elseif ($id_active == 2)
					{
						$this->setMessageFlash(1, 'Se Desactivaron los articulos seleccionados');
					}
					
					return 1; // significa que todas se pudieron eliminar.
				}
			}
			else 
			{
				if ($malas != null)
				{
					if ($id_active == 1) # proceso de activacion
					{
						$this->setMessageFlash(2, 'No Se Activaron los articulos seleccionados');
					}
					elseif ($id_active == 2)
					{
						$this->setMessageFlash(2, 'No Se Desactivaron los articulos seleccionados');
						
					}
					
					return 2; //significa que no se puedieron eliminar ninguna
				}
				else 
				{
					$this->setMessageFlash(2, 'error al Activar/Desactivar');
					return 0; // error
				}
			}
			
			
		}
		
	}
	
	private function proceso_de_act_deact($id_articulo,$id_active)
	{
											
		
			if ($id_active == 1) # proceso de activacion
			{
					$array_articulos_add = array(
												'Articulo' => array(
																		'id' => $id_articulo,
																		'status_articulo' => TRUE
																		
																	)
												);
					
					if($this->Articulo->save($array_articulos_add))
					{
						$this->setMessageFlash(1, 'Se activó el articulo');
						return true;	
					}
					else 
					{
						$this->setMessageFlash(2, 'No se pudo activar el articulo');
						return false;
					}
					
			}
			elseif ($id_active == 2) # proceso de desactivacion
			{
					$array_articulos_add = array(
												'Articulo' => array(
																		'id' => $id_articulo,
																		'status_articulo' => FALSE
																		
																	)
												);	
					if($this->Articulo->save($array_articulos_add))
					{
						$this->setMessageFlash(1, 'Se desactivo el articulo');
						return true;	
					}
					else 
					{
						$this->setMessageFlash(2, 'No se pudo desactivar el articulo');
						return false;
					}
					
			}
			
		
			
			return false;
		
		
		
		
	}
	
	private function postEditArticulo($info_articulo)
	{
		$this->Articulo->create();
		
		$this->Articulo->set($info_articulo);
		
		$error = null;
		
		if ($this->Articulo->validates()) 
		{
    		
			
			if ($this->Articulo->save($info_articulo))
			{
				if ($info_articulo['Articulo']['foto_articulo'] != $info_articulo['Articulo']['foto_articulo_viejo'])
				{
					
					$file = new File(WWW_ROOT."/files/articulo/foto_articulo/".
										$info_articulo['Articulo']['id']."/".
										$info_articulo['Articulo']['foto_articulo_viejo']);
		       		
		       		if($file->exists())
		       			$file->delete();
						
						$this->saveImg($info_articulo['Articulo']['foto_articulo_valor_img'],
										$info_articulo['Articulo']['id'],
										$info_articulo['Articulo']['foto_articulo']);
				}
				
				$this->setMessageFlash(1, 'Se guardo los cambios del Articulo',null);
	
			
			}
			else 
			{
				$this->setMessageFlash(2, 'No se guardo los cambios del Articulo',null);
				
			}
		} 
		else 
		{
		    $this->setMessageFlash(2, 'No se guardo los cambios del Articulo',null);
			
			$error = $this->getErrors( $this->Articulo->validationErrors);
			
			
		
		}
		
		
		
		
		$this->redirect(array(
									'controller' => 'Articulos',
									'action' => 'getEditArticulo',$this->Articulo->id,$error
							   )
						 );
		 
		 
	}
	
	private function llenarInfoArticulo($id_busqueda,$id_articulo)
	{
		if ($id_busqueda == 1) // si es para edit
		{
			$this->llenar_combobox_tipo_articulo(2);
		}
		$this->infoArticuloEspecifica($id_articulo);
	}
	
	private function infoArticuloEspecifica($id_articulo)
	{
		$articulos = $this->Articulo->query('SELECT A.*, TA.* 
											FROM articulos A, tipo_articulos TA
											WHERE TA.id = A.tipo_articulo_id
											AND A.id = '.$id_articulo);
		$this->set('articulos',$articulos);
	}
	
	private function postConsultArticulo()
	{
		
		$nombre_articulo_busq = $this->request->data['Consult_Articulo']['nombre_articulo_busq'];
		$tipo_articulo_busq =	$this->request->data['Consult_Articulo']['tipo_de_articulo_busq'];	
		if ($nombre_articulo_busq == NULL)
		{
			$nombre_articulo_busq = "*";
		}
		
		$this->redirect(array('action' => 'consult_articulo',$tipo_articulo_busq,$nombre_articulo_busq));
		
	}
	
	private function llenar_articulo($id_tipo_articulo,$nombre_articulo)
	{
		$strqry = 'SELECT A.*, TA.*
					FROM articulos A, tipo_articulos TA
					WHERE A.tipo_articulo_id = TA.id';
		
		if ($id_tipo_articulo != 0)
		{
			$strqry = $strqry.' AND TA.id = '.$id_tipo_articulo;
		}
		if ($nombre_articulo != "*")
		{
			$strqry = $strqry.' AND A.nombre_articulo LIKE "%'.$nombre_articulo.'%"';
		}
		$strqry = $strqry.' ORDER BY A.id ASC';
		$articulos = $this->Articulo->query($strqry);
		$this->set('articulos',$articulos);
		
	}
	
	private function infoConsultArticulo($id_tipo_articulo,$nombre_articulo)
	{
		$this->llenar_combobox_tipo_articulo(1);
		$this->llenar_articulo($id_tipo_articulo,$nombre_articulo);
		
		$this->set('id_tipo_articulo',$id_tipo_articulo);
		$this->set('nombre_articulo',$nombre_articulo);
	}
	
	private function postAddArticulo()
	{
		if($this->Articulo->save($this->request->data))
		{
			$this->setMessageFlash(1, "Se guardo el Articulo",null);
			$this->redirect(array('action' => 'index'));
		}
		else
		{
			$this->setMessageFlash(2, "No se guardo el Articulo",null);
		}
	}
	
	private function llenar_combobox_tipo_articulo($id)
	{
		$tipo_articulos = $this->TipoArticulo->find('all');
		
		$arreglo = array();
		
		if ($id == 1)
		{
			array_push($arreglo, array(0 => 'Todos'));
		}
		foreach ($tipo_articulos as $tipo_articulo) 
		{
			array_push($arreglo,array($tipo_articulo['TipoArticulo']['id'] => $tipo_articulo['TipoArticulo']['nombre_tipo_articulo']));
		}

		$this->set('tipoarticulo',$arreglo);
	}
}



?>